﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Entregable.Models;

namespace Entregable.Controllers
{
    public class ProductoController : Controller
    {
        private List<Producto> CrearProducto()
        {
            Sede Surco = new Sede() { Codigo = 1, Nombre = "Surco" };
            Sede SanMiguel = new Sede() { Codigo = 2, Nombre = "San Miguel" };
            Sede SanBorja = new Sede() { Codigo = 3, Nombre = "San Borja" };
            List<Producto> productos = new List<Producto>();
            productos.Add(new Producto() { Codigo = 1, Nombre = "Televisor", Marca = "Samsung",Tipo ="Electrodomestico",Modelo = "LCD", Origen = "Korea",Stock = 10, Sede = Surco });
            productos.Add(new Producto() { Codigo = 2, Nombre = "Televisor", Marca = "LG", Tipo = "Electrodomestico", Modelo = "LCD", Origen = "EEUU", Stock = 15, Sede = Surco });
            productos.Add(new Producto() { Codigo = 3, Nombre = "Televisor", Marca = "Sony", Tipo = "Electrodomestico", Modelo = "LED", Origen = "EEUU", Stock = 20, Sede = Surco });
            productos.Add(new Producto() { Codigo = 4, Nombre = "Televisor", Marca = "Recco", Tipo = "Electrodomestico", Modelo = "LED", Origen = "CHILE", Stock = 30, Sede = Surco });
            productos.Add(new Producto() { Codigo = 5, Nombre = "Cocina", Marca = "Mabe", Tipo = "Electrodomestico", Modelo = "Con Horno", Origen = "China", Stock = 10, Sede = SanBorja });
            productos.Add(new Producto() { Codigo = 6, Nombre = "Cocina", Marca = "Sole", Tipo = "Electrodomestico", Modelo = "Empotrada", Origen = "China", Stock = 15, Sede = SanBorja });
            productos.Add(new Producto() { Codigo = 7, Nombre = "Cocina", Marca = "Bosh", Tipo = "Electrodomestico", Modelo = "Electrica", Origen = "China", Stock = 20, Sede = SanBorja });
            productos.Add(new Producto() { Codigo = 8, Nombre = "Cocina", Marca = "Whirpool", Tipo = "Electrodomestico", Modelo = "Digital", Origen = "China", Stock = 30, Sede = SanBorja });
            productos.Add(new Producto() { Codigo = 9, Nombre = "Tablet", Marca = "Samsung", Tipo = "Tecnologia", Modelo = "11'", Origen = "Korea", Stock = 10, Sede = SanMiguel });
            productos.Add(new Producto() { Codigo = 10, Nombre = "Tablet", Marca = "Sony", Tipo = "Tecnologia", Modelo = "11'", Origen = "Korea", Stock = 15, Sede = SanMiguel });
            productos.Add(new Producto() { Codigo = 11, Nombre = "Tablet", Marca = "Lenovo", Tipo = "Tecnologia", Modelo = "11'", Origen = "Korea", Stock = 20, Sede = SanMiguel });
            productos.Add(new Producto() { Codigo = 12, Nombre = "Tablet", Marca = "Apple", Tipo = "Tecnologia", Modelo = "11'", Origen = "Korea", Stock = 30, Sede = SanMiguel });
            


            return productos;
        }

        private Producto ObtenerProducto(int codigo)
        {   List<Producto> Productos = (List<Producto>)Session["Productos"];
            Producto model = Productos.Single(delegate(Producto producto)
            {
                if (producto.Codigo == codigo) return true;
                else return false;
            });
            return model;
        }
                

        //muestra pagina listado de Productos
        public ActionResult Index()
        {
            if (Session["productos"] == null)
                Session["productos"] = CrearProducto();
            List<Producto> model = (List<Producto>)Session["Productos"];
            return View(model);
        }

        //
        // GET: /Producto/Details/5
        //muestra pagina con datos de un Producto
        public ActionResult Details(int id)
        {
            Producto model = ObtenerProducto(id);
            return View(model);
        }

        //
        // GET: /Producto/Create
        // Muestra pagina para ingresar datos de creacion   
        public ActionResult Create()
        {
            return View();
        } 

        //
        // POST: /Producto/Create
        //recibe datos del formulario y realiza la creacion
        [HttpPost]
        public ActionResult Create(FormCollection collection)
        {
            try
            {
                List<Producto> Asesores = (List<Producto>)Session["Productos"];
                Asesores.Add(new Producto()
                {
                    Codigo = int.Parse(collection["Codigo"]),
                    Nombre = collection["Nombre"],
                    Marca = collection["Marca"],
                    Stock = int.Parse(collection["Stock"]),
                    Tipo = collection["Tipo"],
                    Modelo = collection["Modelo"],
                    Origen = collection["Origen"],

                    Sede = new Sede()
                    {   Codigo = int.Parse(collection["Sede.codigo"]),
                        Nombre = collection["Sede.Nombre"]
                    }
                });

                return RedirectToAction("Index");
            }
            catch
            {
                return View();
            }
        }
        
        //
        // GET: /Producto/Edit/5
        // Muestra pagina con datos a editar
        public ActionResult Edit(int id)
        {
            Producto model = ObtenerProducto(id);
            return View(model);
        }

        //
        // POST: /Producto/Edit/5
        //Recibe datos de formulario y realiza modificacion
        [HttpPost]
        public ActionResult Edit(int id, FormCollection collection)
        {
            try
            {
                Producto model = ObtenerProducto(id);
                model.Nombre = collection["Nombre"];
                model.Marca = collection["Marca"];
                model.Stock = int.Parse(collection["Stock"]);
                model.Tipo = collection["Tipo"];
                model.Modelo = collection["Modelo"];
                model.Origen = collection["Origen"];
                return RedirectToAction("Index");
            }
            catch
            {
                return View();
            }
        }

        //
        // GET: /Producto/Delete/5
        // Muestra pagina para confirmar eliminacion
        public ActionResult Delete(int id)
        {
            Producto model = ObtenerProducto(id);
            return View(model);
        }    

        //
        // POST: /Producto/Delete/5
        //Realiza la Eliminacion
        [HttpPost]
        public ActionResult Delete(int id, FormCollection collection)
        {
            try
            {
                List<Producto> productos = (List<Producto>)Session["productos"];
                productos.Remove(ObtenerProducto(id));
                return RedirectToAction("Index");
            }
            catch
            {
                return View();
            }
        }
    }
}
